package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

/*
 * java.io 将流按照读写单位划分为字节流和字符流
 * 其中
 * java.io.InputStream和outputStream是所有自己输入流与输出流的超类
 * java.io.Reader和Writer则是所有字符输入流和输出流的超类
 * 字节流与字符流之间互不继承
 * 字节流以字节(8为2进制)为最小单位读写数据
 * 字符流则以字符(char)为最小单位读写数据
 * 因此字符流仅用来读写文本数据，且字符流都是高级流
 *
 * 转换流:
 * java.io.InputStreamReader和OutputStreamWriter
 * 转换流是字符流最常用的实现类，我们实际开发中不会直接操作者两个流，但是在流连接中他们是非常重要要的一环，发挥着不可或缺的作用
 *
 * */
public class OSWDemo {
    public static void main(String[] args) throws IOException {
        //文件流对象:不能直接存放String类型数据 需要先将String类型数据先转换为dyte数组在进行存放
        FileOutputStream fos = new FileOutputStream("./owt.txt", true);
        /*
         * OutputStreamWriter 默认使用的字符集 是系统当前所使用的字符集
         * 最好需要自己定义使用那个字符集
         * new OutputStreamWriter(文件流,字符集)
         *
         * OutputStreamWriter 字符写出流中对同样使用的是write方法
         * write(String str)
         * write(char[] c,int off,int len);
         * write(String str,int off,int len);
         * write(int c)
         * */
        OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
        String str = "小小的狼啊，";
        /*
         * 直接将字符串按照UTF-8字符集写入到文件当中
         * 注意
         * 使用此高级流最好只向文件中写入字符数据 ！(图片数据音频数据等等 不支持)
         * */
        osw.write(str);
        System.out.println();
        //outputStreamWriters 同样是存在了一个很小的缓冲区 如果没满 没有主动关闭 没有主动传输的情况下 不会自动传输
        osw.close();
    }
}
